import { defineStore } from 'pinia';
import { footprintApi } from '@/api/footprints';
import { ElMessage } from 'element-plus';

export const useFootprintStore = defineStore('footprints', {
  state: () => ({
    footprintPropertyIds: new Set(),
    footprints: [],
    loading: false,
  }),

  getters: {
    isPropertyFootprinted: (state) => (propertyId) => {
      return state.footprintPropertyIds.has(propertyId);
    },
  },

  actions: {
    /**
     * 从后端获取当前用户的全部足迹（带分页）
     */
    async fetchFootprints() {
      this.loading = true;
      try {
        const response = await footprintApi.getFootprints();

        // 【修正】此action对应的是获取列表的API，其数据在 response.data.data.list
        const footprintList = response.data.data.list || [];

        this.footprints = footprintList;
        this.footprintPropertyIds = new Set(footprintList.map(fp => fp.property.id));

      } catch (error) {
        console.error('获取用户足迹失败:', error);
      } finally {
        this.loading = false;
      }
    },

    /**
     * 添加一个足迹（收藏）
     * @param {number} propertyId
     */
    async addFootprint(propertyId) {
      try {
        const response = await footprintApi.addFootprint(propertyId, { notes: '', rating: null });
        if (response.status === 201) {

          // 【修正】此action对应的是添加单个对象的API，其返回的数据就是 response.data.data 本身
          // 它没有 .list 属性！
          const newFootprint = response.data.data;

          if (!newFootprint || !newFootprint.property) {
            // 添加一个健壮性检查，以防万一后端返回了非预期的空结构
            console.error('收到的新足迹数据格式不正确', response.data);
            ElMessage.error('收藏失败，响应数据异常');
            return;
          }

          this.footprints.push(newFootprint);
          this.footprintPropertyIds.add(newFootprint.property.id); // 现在 newFootprint 是一个有效对象，可以安全地读取 .property
          ElMessage.success('收藏成功！');
        }
      } catch (error) {
        console.error('添加足迹失败:', error);
        ElMessage.error(error.response?.data?.message || '收藏失败，请重试');
        throw error;
      }
    },

    /**
     * 移除一个足迹（取消收藏）
     * @param {number} propertyId
     */
    async removeFootprint(propertyId) {
      try {
        await footprintApi.deleteFootprint(propertyId);
        this.footprints = this.footprints.filter(fp => fp.property.id !== propertyId);
        this.footprintPropertyIds.delete(propertyId);
        ElMessage.success('已取消收藏');
      } catch (error) {
        console.error('移除足迹失败:', error);
        ElMessage.error(error.response?.data?.message || '取消收藏失败，请重试');
        throw error;
      }
    },
  },
});